package com.mxy.myapplication.lockdown;

/**
 * 双检索单例模式+内部类单例模式  推荐使用内部类单例模式
 *
 * @author 马晓勇
 */
public class TestLockDownEvent {

    private static final String OBJ1 = "abc";
    private static final String OBJ2 = "bcd";

    private TestLockDownEvent() {

    }

    /**
     * 内部类单利模式_利用内部类延迟加载机制
     */
    private static class InnerClassInstance {
        private static TestLockDownEvent testLockDownEvent = new TestLockDownEvent();
    }


    /**
     * 只有当调用getInstance()时内部类才会被装载，并且是线程安全的
     *
     * @return
     */
    public TestLockDownEvent getInstance() {
        return InnerClassInstance.testLockDownEvent;
    }
//---------------------------------------------

    /**
     * 双检索单例模式
     */
    private static volatile TestLockDownEvent testLockDownEvent;

    /**
     * 双检索单例模式
     *
     * @return
     */
    public static TestLockDownEvent getTestLockDownEvent() {

        if (testLockDownEvent == null) {
            //仅仅给初始化代码加上同步锁
            synchronized (TestLockDownEvent.class) {
                if (testLockDownEvent == null) {
                    testLockDownEvent = new TestLockDownEvent();
                }
            }
        }
        return testLockDownEvent;
    }
}